"""
# 缺省参数
# 应用: 定义函数时,给函数的参数一个默认值
# 目的: 简化函数的调用
# 使用说明
# 定义函数时,给函数参数给一个默认值
# 调用函数时,如果没有传入缺省参数值,则使用默认值;如果传入参数值了,则使用传入的值
# 注意事项
# 定义函数时,存在多个参数,并且有缺省参数时,将缺省参数置于参数列表的末尾
# 调用函数时,如果有多个缺省参数,需要指定缺省参数名和值的对应关系【一一对应】
# 案例演示
# 定义函数
# def stu_info(gender="男",name, age): # 缺省值参数必须放在其他参数的末尾，否则直接报错
def stu_info(name, age, gender="男"):
# 打印学生基本信息
    print(f"{name}的年龄是：{age}，性别是：{gender}")
#调用函数
stu_info("张三",122)
# 总结：为了方便函数的调用
# 1.定义函数缺省值参数必须放在普通参数的末尾
# 2.调用函数时，实参和形参的位置必须一一对应【或者，调用时带参数名，这样就不会出现次序的错乱】

# 多值参数
# > 应用场景: 定义函数处理的参数个数不确定,需要用多值参数
# ‐ 语法格式
# 定义多值参数的函数
def func(*args):
    print(args)
# args的结果是一个元组类型的数据
# 需求:
# 1. 定义一个函数 sum_numbers，可以接收的 任意多个整数
# 2. 功能要求：将传递的 所有数字累加 并且返回累加结果
# 分析：
# 1.定义函数（有参数，并且个数不确定）
def sum_numbers(*args):
# 一个变量args接收了一堆数据（元组类型数据）如：args = (1,2,3,4,5)
# 定义初始结果变量
    result = 0
# 先取出元素
    for i in args:
# 在累加求和
        result += i
# 返回结果
    return f"累加的结果是：{result}"
# 2.调用函数
aa = sum_numbers(10,2,3,4,5,6)
print(aa)
"""


# 分析：
# 1.定义函数（有参数，并且个数不确定）
def sum_numbers(*args):
    """
    累计求和返回结果
    :param args: 多个参数
    :return: 返回计算结果
    """
# 多值参数的结果元组，所有数据累计求和：对于元组里面所有元素累计求和
# 元组元素取出来，然后分别累计求和
# result = 0
# for i in args:
#     result += i # result = result + i
# return result



# 调用函数（传递数据个数也不确定）
# num = (1, 2, 3, 4, 5)  定义一个元组 print(sum_numbers(*num)) # 将整个元组作为实参传递时，需要先拆包再传
# 递
# 总结: 调用函数时,把一个元组变量当做整体传给多值参数时,需要在元组变量前面加* ,叫拆包


### 3.3 ==匿名函数:black_flag:==
# > 应用场景：
# > 1. 简化带有形参和返回值的函数定义
# > 2. 某些方法（函数）需要传递一个函数作为参数时可以使用匿名函数，传入到其他方法（函数）里
# > 使用前提：相当于普通函数有参数，普通函数有返回值场景，可以用匿名函数
# ‐ 匿名函数介绍
# ‐ 没有名字的函数,即不需要关键字def去定义,但是需要**lambda**关键字说明
# ‐ 匿名函数可以接收**任何数量**的参数,但是只**返回**一个表达式的值
# ‐ 语法格式
# 匿名函数定义,返回结果为一个值
# 变量名 = lambda 参数1,参数2,... : 表达式
# 变量名相当于普通函数的函数名
# 使用时直接用:变量名(参数1,参数2,...)
# 1.普通函数实现两个数字求和
# 定义函数
def demo(a, b):
    result = a + b
# 返回结果
    return result
# 调用函数
print(demo(10, 20))
# 2.匿名函数实现两个数字求和
result = lambda a, b: a + b
# 使用匿名函数
print(result(10, 20))


# 1. 已知用户信息数据如下:
user_list = [
{'name': '张三', 'age': 22, 'title': '测试工程师'},
{'name': '李四', 'age': 24, 'title': '开发工程师'},
{'name': '王五', 'age': 21, 'title': '测试工程师'}
]
# 排序:按照人的年龄信息排序
# 参数 key : 必须传入的函数，其作用是描述按照元素的哪个指标排序
# 参数 reverse ： 排序方式（升序/降序）
# 年龄指标取出来？
# 假设给我的第一个字典元素是： x = {'name': '张三', 'age': 22, 'title': '测试工程师'}
# 获取年龄指标？ x['age'] 或者 x.get("age")
# 1.需要知道字典的变量名 ‐‐> 字典名会变？ ‐‐> 变量 ‐‐> 参数
# 2.需要返回年龄的值 ‐‐> 获取年龄的表达式
# 结论：需要匿名函数实现
keys = lambda x:x.get("age") # 这个x就是列表的每个元素
# 1.直接进行排序：升序
user_list.sort(key=keys)
# 打印原始列表
print(user_list)
# 2.降序
user_list.sort(key=keys,reverse=True)
# 打印原始列表
print(user_list)

